package ycl.security.service;

import ycl.common.models.req.login.RegisterByMobilePassReq;
import ycl.common.models.req.login.UsernamePasswordReq;
import ycl.common.models.res.LoginUser;
import ycl.system.entity.SysUser;

import javax.servlet.http.HttpServletRequest;

/**
 * 登录
 *
 * @author ycl
 * @date 2022-03-09 16:29:28
 */
public interface LoginService {


	/**
	 * 临时登录方法
	 *
	 * @param request 请求
	 * @param req     请求参数
	 * @return 登录用户
	 */
	LoginUser login(HttpServletRequest request, UsernamePasswordReq req);

	/**
	 * 微信登录
	 *
	 * @param wechatId 微信id
	 * @return 登录用户
	 */
	LoginUser login(HttpServletRequest request, String wechatId);

	/**
	 * 登录
	 *
	 * @param sysUser       用户
	 * @param loginType     登录类型, 目前没起作用
	 * @param remoteAddress 远程登录地址
	 * @return 登录用户
	 */
	LoginUser login(SysUser sysUser, String loginType, String remoteAddress);

	/**
	 * 根据用户名获取用户,
	 * 如果没有此用户名就是手机号,
	 * 如果没有手机号就......
	 * 最后都没有就返回null
	 *
	 * @param username 用户登录数据
	 * @return 用户
	 */
	SysUser getUserByUsername(String username);

	/**
	 * 查询用户是否存在(也许是用户名、手机号、身份证、邮箱等等)
	 *
	 * @param s 查询数据
	 */
	boolean selectExist(String s);

	/**
	 * 退出登录
	 *
	 * @param token      token
	 * @param loginType  登录方式
	 * @param remoteAddr 远程登录地址
	 */
	void logout(String token, String loginType, String remoteAddr);

	/**
	 * 手机号密码注册
	 *
	 * @param req 注册数据
	 */
	void registerByMobilePassword(RegisterByMobilePassReq req);
}
